#include <iostream>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
using namespace std;
int main()
{
    //cout << "Hello C" << endl;
    //int fd = open("my.txt", O_WRONLY|O_APPEND);
    //close(2);
    //int ret = dup2(fd, 2);
    //if(ret == -1)
    //{
    //    perror("dup2");
    //    return 1;
    //}
    //printf("redirection\n");
    //close(fd);

    ////向标准错误输出信息，标准错误存在的原因：将常规消息和错误消息进行分离
    //cerr << "Hello C++" << endl;
    //fprintf(stderr, "%s", "hello strerr\n");
    int fd = open("new.txt", O_CREAT|O_WRONLY|O_TRUNC);
    dup2(fd, 1);
    printf("Hello printf\n");
    fprintf(stdout, "Hello fprintf\n");
    const char* s = "Hello fwrite\n";
    fwrite(s, strlen(s), 1, stdout);

    const char* ss = "Hello write\n";
    //write直接写给操作系统（文件内核）不需要缓冲区刷新的问题
    write(1, ss, strlen(ss));
    
    //一旦发生重定向，就不再是向屏幕写入，而是向磁盘的文件写入，因此改变了刷新方式
    //不再是行缓冲，而是全缓冲
    fork();

    return 0;
}
